package com.lmj.mybatisPlus.entry.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.lmj.mybatisPlus.constant.EmployeeEnumType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.util.Map;

/**
 * @TableName employee
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "employee", autoResultMap = true)
public class Employee implements Serializable {

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    /**
     * @NotNull注解： 1.校验类里面的@NotNull注解：基本数据类型包装类不为空
     * 2.lombok里面的@NotNull注解是负责生成必要的构造函数的参数的
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    @NotBlank//字符串不可以为null或者""
    private String lastName;
    @Email//判断邮件是不是合法
    private String email;
    /**
     * todo 【枚举】注意点
     * <li/>1.枚举类中加上@EnumValue和@JsonValue
     * <li/>2.枚举变量与数据库一致
     * <li/>3.使用toString方法不会打印枚举属性（只会打印枚举变量名），使用Jackson包下的方法转换成json才会打印枚举的属性
     */

    private EmployeeEnumType gender;

    @TableField("d_id")
    private Integer departmentId;
    /**
     * typeHandler：负责javaType和jdbcType转换
     * <li/>1.JacksonTypeHandler
     * 支持 MVC JSON 解析
     * 支持 MySQL JSON 解析
     * <li/>2.FastjsonTypeHandler
     * 支持 MVC JSON 解析
     * 不支持 MySQL JSON 解析
     * <li/>autoResultMap与typeHandler一起使用可以解决类型处理的问题。（但是仅对MyBatisPlus自己提供的方法有效，自定义的无效）
     */

    @NotEmpty//集合不为空
    @TableField(typeHandler = JacksonTypeHandler.class)
    private Map<String, String> contact;


}
